Nuxt ๋์๋ณด๋ ํ๋ก์ ํธ ์๋ฆฌ์ฆ (2): Naive UI์ UnoCSS ์ฐ๋ํ๊ธฐ
๋์๋ณด๋๋ ์ ๋ณด๊ฐ ๋ช ํํ๊ฒ ์ ๋ฌ๋์ด์ผ ํฉ๋๋ค. Naive UI์ ๊ฐ๋ ฅํ ์ปดํฌ๋ํธ์ UnoCSS์ ๋น ๋ฅธ ์คํ์ผ๋ง์ ๊ฒฐํฉํ์ฌ ๋์์ธ ์์คํ ์ ๊ตฌ์ถํด ๋ณด๊ฒ ์ต๋๋ค.
1. UnoCSS ์ค์ (uno.config.ts)
ํ๋ก์ ํธ ๋ฃจํธ์ uno.config.ts ํ์ผ์ ์์ฑํ์ฌ ๊ธฐ๋ณธ ํ๋ฆฌ์
๊ณผ ๋จ์ถ์ด(Shortcuts)๋ฅผ ์ ์ํฉ๋๋ค.
// uno.config.ts
import { defineConfig, presetUno, presetAttributify, presetIcons } from 'unocss'
export default defineConfig({
presets: [
presetUno(), // ๊ธฐ๋ณธ ํ๋ฆฌ์
presetAttributify(), // ์์ฑ ๊ธฐ๋ฐ ์คํ์ผ ์ง์
presetIcons(), // ์์ด์ฝ ์ฌ์ฉ ์ง์
],
shortcuts: {
'flex-center': 'flex items-center justify-center',
'card-base': 'bg-white rounded-lg shadow-sm border border-gray-200 p-4',
}
})2. Naive UI ํ ๋ง ์ปค์คํฐ๋ง์ด์ง
Naive UI๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ง์ผ๋ก ์ ์ฒด ํ ๋ง๋ฅผ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
<!-- app.vue -->
<script setup>
import { NConfigProvider, zhCN, dateZhCN } from 'naive-ui'
/** @type {import('naive-ui').GlobalThemeOverrides} */
const themeOverrides = {
common: {
primaryColor: '#18a058',
primaryColorHover: '#36ad6a',
},
Button: {
fontWeight: 'bold'
}
}
</script>
<template>
<n-config-provider :theme-overrides="themeOverrides">
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</n-config-provider>
</template>3. ์์ด์ฝ ์์คํ ๊ตฌ์ถ
๋์๋ณด๋์์ ์์ด์ฝ์ ํ์์
๋๋ค. UnoCSS์ presetIcons๋ฅผ ํ์ฉํ๋ฉด ๋ณ๋์ SVG ํ์ผ ์์ด ํด๋์ค๋ช
๋ง์ผ๋ก ์๋ง ๊ฐ์ ์์ด์ฝ์ ์ธ ์ ์์ต๋๋ค.
<!-- ์ฌ์ฉ ์์ -->
<div class="i-carbon-dashboard text-xl" /> <!-- ๋์๋ณด๋ ์์ด์ฝ -->
<div class="i-carbon-user-avatar text-blue-500" /> <!-- ์ ์ ์์ด์ฝ -->4. ์ UnoCSS์ธ๊ฐ?
- ์ฑ๋ฅ: ์ฌ์ฉํ์ง ์๋ ํด๋์ค๋ ๋น๋ ์ ์์ ํ ์ ๊ฑฐ๋์ด CSS ์ฉ๋์ด ๊ทน๋จ์ ์ผ๋ก ์์์ง๋๋ค.
- ์ ์ฐ์ฑ:
presetAttributify๋ฅผ ์ฐ๋ฉด<div m-2 p-4>์ฒ๋ผ ์์ฑ ํํ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ด ๊ฐ๋ ์ฑ์ด ์ข์์ง๋๋ค.
5. ๊ฒฐ๋ก
๋์์ธ ์์คํ ์ ๊ธฐ์ด๊ฐ ์์ฑ๋์์ต๋๋ค. ์ด์ ๋์๋ณด๋์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ Pinia ์คํ ์ด๋ฅผ ์ค๊ณํ๋ฌ ๊ฐ๋ณด๊ฒ ์ต๋๋ค.